QT5 创建“打开文件”按钮

在GUI界面设计中,有时需要“打开文件”按钮,以加载外部文件,则需要我们用QFileDialog的静态函数完成,QT5中几个文件相关函数如下:

函数名作用
getOpenFileName加载用户选择文件的文件名
getSaveFileName加载用户保存文件的文件名
getExistingDirectory加载用户选择目录名
getOpenFileNames加载用户选择文件的文件名列表

getOpenFileName的构造函数:

QString QFileDialog::getOpenFileName (
          QWidget * parent = 0,
          const QString & caption = QString(),
          const QString & dir = QString(),
          const QString & filter = QString(),
          QString * selectedFilter = 0,
          Options options = 0 )

第一个参数parent,用于定义父对象。

第二个参数caption,对话框的标题,可设定为“打开文件”、“选择一个目标文件”等自定义标题;

第三个参数dir,对话框显示时默认打开的目录,"." 代表程序运行目录,"/" 代表当前盘符的根目录,可更改为例如e:/qt/5.5指定路径。

第四个参数filter,对话框的后缀名过滤器,"Files(*.doc *.xls)“就让它只能显示后缀名是doc或者xls的文件,后缀之间用空格隔开。如果需要使用多个过滤器,使用”::"分割。

第五个参数selectedFilter,默认选择的过滤器;

第六个参数options,选择显示格式,默认目录和文件名同时显示。

最终效果如下:
点击打开文件按钮,弹出常规文件选择对话框,选择打开文件,并且显示在文本框中。
在这里插入图片描述
具体步骤如下:
1、在.h文件中添加声明头文件;

#include <QLineEdit>
#include <QGridLayout>

2、添加控件声明;

private:
    QPushButton *fileBtn;
    QLineEdit *fileLineEdit;
    QGridLayout *mainLayout;

3、添加自定义函数声明,用于接收按钮按下后打开文件的信号;

private slots:
    void showFile();

4、在.cpp中添加声明头文件;

#include<QGridLayout>
#include<QFileDialog>
#include<QPushButton>

5、添加常规按钮、文本框控件初始化执行代码;

	   fileBtn=new QPushButton;                   	
	   fileBtn->setText(tr("打开文件..."));
	   fileLineEdit=new QLineEdit;               
	   mainLayout=new QGridLayout(this);         
	   mainLayout->addWidget(fileBtn,0,1);
	   mainLayout->addWidget(fileLineEdit,0,0);
	   connect(fileBtn,SIGNAL(clicked()),this,SLOT(showFile()));    //按钮按下后信号发出执行操作

6、添加按钮按下后的信号函数showFile();

void Dialog::showFile()
{
    QString s = QFileDialog::getOpenFileName(this,"选择文件","/", "Files(*.doc *xls)");
    fileLineEdit->setText(s);						//将打开文件的文件名显示在文本框中
}
  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
http://blog.csdn.net/yulinxx/article/details/43260203 ------------------------------------------ C++ 国际化!!!!! 创建一个空白的Qt工程 添加一个main.cpp #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv) QWidget* pWnd = new QWidget(); QPushButton* pBtn = new QPushButton(QPushButton::tr("Test Translate")) QVBoxLayout* pVlayout = new QVBoxLayout(); pVlayout->addWidget(pBtn) pWnd->setLayout(pVlayout); pWnd->show(); return a.exec(); } 即可运行起来。。。。 此工程中,只有按钮上有文字。。。运行如下图示: 在工程中加入: TRANSLATIONS += testTrans_en.ts (ts文字名可随意取) 然后执行: Tools -> External -> Linguist -> Update Translations(lupdate) 提示完成: /usr/local/Qt5.4.0/5.4/gcc_64/bin/lupdate" finished 在工程中,可以发现多了一个 testTrans_en.ts 文件,此文件可用文本编辑器打开进行查看,如: QPushButton Test Translate 此步骤是将工程中的文字(加tr等包含的文字)进行提取到ts文件中 接下来,在终端运行 x@x:~$ linguist 打开 Qt Linguist 翻译工具,对文字进行逐个翻译并保存 在工程中再执行: Tools -> External -> Linguist -> Release Translations(lrelease) 结果提示:/usr/local/Qt5.4.0/5.4/gcc_64/bin/lrelease" finished 在工程中,可以发现多了一个 testTrans_en.qm文件,此文件为二进制格式文件,即我们最终使用的翻译文件 然后添加Qt资源,将testTrans_en.qm添加进来 修改main.cpp文件,将翻译文件添加进来,最终执行 #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QTranslator qtTranslator; qtTranslator.load(":/translate/testTrans_en.qm") a.installTranslator(&qtTranslator); QWidget* pWnd = new QWidget(); QPushButton* pBtn = new QPushButton(QPushButton::tr("Test Translate")) QVBoxLayout* pVlayout = new QVBoxLayout(); pVlayout->addWidget(pBtn) pWnd->setLayout(pVlayout); pWnd->show() return a.exec() } 最终执行结果:
1、首先,先创建一个新文件,并在里面添加新的Qt设计界面 可以得到如图,mainwindow是主界面,widget是我新添加的子界面 2、注意将子界面的.h文件添加主界面的.h中 3、在主界面的.h中,添加子界面的变量及打开子界面和处理子界面信号的函数(在主ui中创建按钮) 4、在子界面.h文件中,添加打开主界面函数和信号(在子ui中创建按钮) 5、在主界面.cpp中连接信号和槽,及对应函数 6、在子界面.cpp中,写相关函数和信号 最终结果: 主界面和子界面间,通过按钮进行相互切换~ 下面附上源码: Mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "widget.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_pushButton_clicked(); void dealslot(); private: Ui::MainWindow *ui; widget wid; }; #endif // MAINWINDOW_H Widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class widget; } class widget : public QWidget { Q_OBJECT public: explicit widget(QWidget *parent = nullptr); ~widget(); private slots: void on_pushButton_clicked(); signals: void ChangeUiSlot(); private: Ui::widget *ui; }; #endif // WIDGET_H Mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "widget.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //connect(&wid,SIGNAL(ChangeUiSlot()),this,SLOT(dealslot())); connect(&wid,&widget::ChangeUiSlot,this,&MainWindow::dealslot); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { this->hide(); wid.show(); } void MainWindow::dealslot() { this->show(); wid.hide(); } Widget.cpp #include "widget.h" #include "ui_widget.h" widget::widget(QWidget *parent) : QWidget(parent), ui(new Ui::widget) { ui->setupUi(this); } widget::~widget() { delete ui; } void widget::on_pushButton_clicked() { emit ChangeUiSlot(); } Main.cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值